let express = require('express');
let router = express.Router();

const checkJWTMiddleWare = require('../middleWare/checkJWTMiddleWare');

const printService = require('../service/printService');

// 查询开店情况
router.get('/is-open', async function (req, res, next) {
    res.json(new Response().ok('获取打印店铺信息成功', {
        isOpen: true
    }));
});

// 此路由需要登录后才能访问
router.use(checkJWTMiddleWare);

const PrintOrder = require('../entity/print/PrintOrder');
const Response = require('../entity/http/Response');

// 打印价格情况
router.get('/price', async function (req, res, next) {
    res.json(new Response().ok('获取打印价格成功', {
        text: "黑白单面: 0.2元/张, 彩色单面: 0.5元/张, 黑白双面: 0.35元/张, 彩色双面: 0.8元/张"
    }));
});

/**
 * 添加打印订单
 * @param { string } type       打印类型 1: 上门取件, 2: 派送服务
 * @param { string } address    配送地址 当用户选择派送服务时必填
 * @param { string } name       姓名或者昵称
 * @param { string } phone      配送电话
 * @param { number } count      打印份数
 * @param { string } file       打印文件 base64 dataURL 格式
 * @param { string } fileName   打印文件名称
 * @param { string } remark     备注
 */
router.post('/order', async function (req, res, next) {
    console.log(`[log] [req-id=${req.reqId}] 进入了 POST /print/order 接口`);
    let uid = req.jwtResult.data.uid;
    let order = new PrintOrder(req.body);
    let flag = order.check();
    if (!flag.success) {
        return res.status(400).json(flag);
    }
    console.log(`[log] [req-id=${req.reqId}] 参数校验成功`);
    printService.createOrder(uid, order).then((result) => {
        console.log(`[log] [req-id=${req.reqId}] 响应 result`, result);
        res.status(result.code).json(result);
    }).catch((err) => {
        console.log(`[log] [req-id=${req.reqId}] 服务器错误`, err);
        res.status(500).json((new Response()).fail("创建订单失败"));
    });
});

/**
 * 获取订单列表
 * 响应数据 { string } status          订单状态
 * 响应数据 { string } id              订单ID
 * 响应数据 { string } address         配送地址 当用户选择派送服务时必填
 * 响应数据 { string } name            姓名或者昵称
 * 响应数据 { string } phone           配送电话
 * 响应数据 { number } count           打印份数
 * 响应数据 { string } startOrderTime  下单时间
 * 响应数据 { string } endOrderTime    完成时间 如果状态为未完成则为空 前端应提醒用户订单未完成
 * 响应数据 { string } remark          备注
 */
router.get('/self-orders', function (req, res, next) {
    console.log(`[log] [req-id=${req.reqId}] 进入了 POST /print/order 接口`);
    let uid = req.jwtResult.data.uid;
    printService.getSelfOrderList(uid).then((result) => {
        console.log(`[log] [req-id=${req.reqId}] 响应 result`, result);
        res.status(result.code).json(result);
    }).catch((err) => {
        console.log(`[log] [req-id=${req.reqId}] 服务器错误`, err);
        res.status(500).json((new Response()).fail("获取订单列表失败"));
    });
});

/**
 * 获取订单详情
 * 响应数据 { string } status          订单状态
 * 响应数据 { string } id              订单ID
 * 响应数据 { string } address         配送地址 当用户选择派送服务时必填
 * 响应数据 { string } name            姓名或者昵称
 * 响应数据 { string } phone           配送电话
 * 响应数据 { number } count           打印份数
 * 响应数据 { string } startOrderTime  下单时间
 * 响应数据 { string } endOrderTime    完成时间 如果状态为未完成则为空 前端应提醒用户订单未完成
 * 响应数据 { string } remark          备注
 */
router.get('/order', function (req, res, next) {
});

module.exports = router;